# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.Dataflow.V1b3.Model.WorkerMessageResponse do
  @moduledoc """
  A worker_message response allows the server to pass information to the sender.

  ## Attributes

  *   `streamingScalingReportResponse` (*type:* `GoogleApi.Dataflow.V1b3.Model.StreamingScalingReportResponse.t`, *default:* `nil`) - Service's streaming scaling response for workers.
  *   `workerHealthReportResponse` (*type:* `GoogleApi.Dataflow.V1b3.Model.WorkerHealthReportResponse.t`, *default:* `nil`) - The service's response to a worker's health report.
  *   `workerMetricsResponse` (*type:* `GoogleApi.Dataflow.V1b3.Model.ResourceUtilizationReportResponse.t`, *default:* `nil`) - Service's response to reporting worker metrics (currently empty).
  *   `workerShutdownNoticeResponse` (*type:* `GoogleApi.Dataflow.V1b3.Model.WorkerShutdownNoticeResponse.t`, *default:* `nil`) - Service's response to shutdown notice (currently empty).
  *   `workerThreadScalingReportResponse` (*type:* `GoogleApi.Dataflow.V1b3.Model.WorkerThreadScalingReportResponse.t`, *default:* `nil`) - Service's thread scaling recommendation for workers.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :streamingScalingReportResponse =>
            GoogleApi.Dataflow.V1b3.Model.StreamingScalingReportResponse.t() | nil,
          :workerHealthReportResponse =>
            GoogleApi.Dataflow.V1b3.Model.WorkerHealthReportResponse.t() | nil,
          :workerMetricsResponse =>
            GoogleApi.Dataflow.V1b3.Model.ResourceUtilizationReportResponse.t() | nil,
          :workerShutdownNoticeResponse =>
            GoogleApi.Dataflow.V1b3.Model.WorkerShutdownNoticeResponse.t() | nil,
          :workerThreadScalingReportResponse =>
            GoogleApi.Dataflow.V1b3.Model.WorkerThreadScalingReportResponse.t() | nil
        }

  field(:streamingScalingReportResponse,
    as: GoogleApi.Dataflow.V1b3.Model.StreamingScalingReportResponse
  )

  field(:workerHealthReportResponse, as: GoogleApi.Dataflow.V1b3.Model.WorkerHealthReportResponse)

  field(:workerMetricsResponse,
    as: GoogleApi.Dataflow.V1b3.Model.ResourceUtilizationReportResponse
  )

  field(:workerShutdownNoticeResponse,
    as: GoogleApi.Dataflow.V1b3.Model.WorkerShutdownNoticeResponse
  )

  field(:workerThreadScalingReportResponse,
    as: GoogleApi.Dataflow.V1b3.Model.WorkerThreadScalingReportResponse
  )
end

defimpl Poison.Decoder, for: GoogleApi.Dataflow.V1b3.Model.WorkerMessageResponse do
  def decode(value, options) do
    GoogleApi.Dataflow.V1b3.Model.WorkerMessageResponse.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.Dataflow.V1b3.Model.WorkerMessageResponse do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
